package fachada;

import logica.acciones.PoolAcciones;
import dtos.DTOCoordenadas;
import dtos.DTONombPartidaBarco;
import dtos.DTORespuestaAAccion;
import dtos.DTORespuestaAAccion2;
import dtos.DTORespuestaAActualizar;
import dtos.DTORespuestaACargarPartida;
import dtos.DTORespuestaACreacionPartida;
import dtos.DTORespuestaAUnirseAPartida;
import enums.TipoObjeto;
import excepciones.PersistenciaException;

public class FachadaLogica {

private PoolAcciones fachada;
	
	public FachadaLogica()
	{
		try {
			fachada = new PoolAcciones();
		} catch (PersistenciaException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public DTORespuestaACreacionPartida CrearPartida(String nombrePartida,
			TipoObjeto tipoBarco, int idMapa)
			{
		DTORespuestaACreacionPartida respuesta = null;
		
		try {
			respuesta = fachada.CrearPartida(nombrePartida, tipoBarco, idMapa);
		} catch (PersistenciaException e) {
			respuesta = new DTORespuestaACreacionPartida(e.getMensaje());
		}
		
		return respuesta;
			}
	public DTORespuestaAUnirseAPartida UnirPartida(int idPartida){
		
        DTORespuestaAUnirseAPartida respuesta = null;
		
		try {
			respuesta = fachada.UnirPartida(idPartida);
		} catch (PersistenciaException e) {
			respuesta = new DTORespuestaAUnirseAPartida(e.getMensaje());
		}
		
		return respuesta;
	}
	
	public void FinalizarPartida(String idJugador){
		try {
			fachada.FinalizarPartida(idJugador);
		} catch (PersistenciaException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
	}
	public DTORespuestaAActualizar actualizar(String idJugador)
	{
		DTORespuestaAActualizar respuesta = null;
					respuesta = fachada.actualizar(idJugador);		
		return respuesta;
	}
	
	public DTONombPartidaBarco[] listarPartidasEnEspera() 
	{
		DTONombPartidaBarco[] dtoResp = null;		
			dtoResp = fachada.ListarPartidasEnEspera();		
		return dtoResp;
	}
	
	public DTORespuestaAAccion2 EjecutarAccion(String idJugador, int tipoAccion, DTOCoordenadas coordenadas){
		DTORespuestaAAccion2 respuesta = null;		
			try {
				respuesta = fachada.EjecutarAccion(idJugador, tipoAccion, coordenadas);
			} catch (PersistenciaException e) {
				// TODO Auto-generated catch block
				respuesta = new DTORespuestaAAccion2("Se ha producido un error al ejecutar la accion");
			}		
		return respuesta;
	}
	
	public void FinalizarTurno(String idJugador){
		try {
			fachada.FinalizarTurno(idJugador);
		} catch (PersistenciaException e) {			
			e.printStackTrace();
		}
	}
	
	public void GuardarPartida(String idJugador){
		try {
			fachada.guardarPartida(idJugador);
		}
		catch(Exception ex){
			ex.printStackTrace();
		}
	}
	
	public DTORespuestaACargarPartida CargarPartida(String idJugador){
		DTORespuestaACargarPartida respuesta = null;
		try{
			respuesta = fachada.cargarPartida(idJugador);			
		}
		catch(Exception ex){
			ex.printStackTrace();
		}
		return respuesta;
	}

}
